/*
srkrt_dynamic_list.h
Ce fichier contient les protoypes des fonctions utilisées pour manipuler la liste.
*/

#ifndef INCLUDE_SRKRT_DYNAMIC_LIST
#define INCLUDE_SRKRT_DYNAMIC_LIST

#include "srkrt_others_struct.h"
/* implementation de la liste dynamique 
*/ 

typedef struct s_List {
	Cel *head ;

} List;

typedef Cel* Iter;

/* ---------------------------------------
	Declaration des fonctions 
--------------------------------------- */

/*
Nom : list_create
Fct : cree une nouvelle liste
Entree : -
Sortie : List
*/
List srkrt_list_create(void);

/*
Nom : list_is_empty
Fct : détermine si une liste est vide
Entree : List
Sortie : booléen
*/
bool srkrt_list_is_empty(List* l);

/*
Nom : list_add
Fct : ajoute un élément à une liste
Entree : adresse d'une List, Element
Sortie : -
*/
void srkrt_list_add(List* l, Move m);

/*
Nom : p_list_remove
Fct : supprime l'élément de tete à un List

*/

void srkrt_list_destroy(List* l);

bool p_list_remove(List* l, Cel* cel, Move m);

/*
Nom : p_is_present
Fct : retourne true si l'element est egal
*/
bool p_is_present(List* l, Cel* cel, Move m);


bool srkrt_list_map(bool (*f)(List*, Cel*, Move), List* list, Move m);

Iter srkrt_iter_create(List* list);
void srkrt_iter_next(Iter* iter);
Move srkrt_iter_get_value(Iter iter);


#endif
